#ifndef CIRCUITSWITCHING_H
#define CIRCUITSWITCHING_H

#include <QObject>

#include "source/superheader.h"
#include "source/hub/hub.h"
#include "source/channel/channel.h"
#include "source/flow/flow.h"
#include "source/network/network.h"
#include "source/signal/signal.h"

class CircuitSwitching : public QObject
{
  Q_OBJECT

private:
  Network network;
  double  comutionTime;
  int     controllableFlow;
  int     limMessages;
  double  curTime;    // текущее время
  double  sumTime;    // суммарное время
  double  halfDelay;  // задержка вычисленная на половине переданных сообщений
  double  totalDelay; // задержка вычисленная после передачи всех сообщений контролируемого потока
  int     nMessages;  // число переданных сообщений

public:
  explicit CircuitSwitching(Network &net,       // структура сети
                            double   comutionT, // время коммутации каналов
                            int     &contrFlow, // контралируемый поток
                            int     &limM,      // число сообщений для передачи
                            QObject *parent = 0);

  void   core();                                // ядро класса
  Signal findLeader(Hub* root/*, double curTime*/); // найти лидера
  Hub   *findRoot();                               // найти корень для контролируемого потока
  void   releasePath(Hub *s, Hub *d, double time); // освободить занятые для передачи каналы

signals:

public slots:

};

#endif // CIRCUITSWITCHING_H
